############################################################ 创建进程
"""

python中在os模块中可以创建进程：
window环境：multiprocessing.Process
linux、mac：os.fork()
"""

import os
from multiprocessing import Process


# 使用Process创建进程

def test():
    print(f"我是子进程，我的pid为：{os.getpid()}, 父进程为：{os.getppid()}")


# if __name__ == '__main__':
#
#     print("主进程开始。。")
#
#     processList = []
#     for i in range(5):
#         """
#         参数列表：
#         group：表示分组，实际上不使用，值默认为None即可
#         target：表示子进程要执行的任务，支持函数名
#         name：表示子进程的名称
#         args：表示调用函数的未知参数，以元祖的形式进行传递
#         kwargs：表示调用函数的关键字参数，以字典的形式进行传递
#         """
#         # 创建进程
#         p = Process(target=test())
#         # 启动进程
#         p.start()
#         processList.append(p)
#     #
#     # for item in processList:
#     #     # 等待子进程结束
#     #     item.join()
#
#     print("主进程结束。。")


# 继承的方式创建进程

class MyProcess(Process):

    def __init__(self, name: str):
        super().__init__()
        self.name = name

    def run(self):
        print(f"子进程的名称：{self.name}, pid:{os.getpid()}, 父进程的pif:{os.getppid()}")

if __name__ == '__main__':

    print('父进程开始。。')
    list = []
    for i in range(5):
        p = MyProcess(name=f"Process-{i}")
        p.start()
        list.append(p)

    for item in list:
        item.join()

    print('父进程结束。。')

"""
进程常用方法:
name:当前进程实力别名，默认为Process-N
pid:当前进程对象的pid值
is_alive():京城是否执行完  
join(timeout):等待结束或等待timeout秒
start():启动进程
run():如果没有指定target参数，则启动进程后，会调用父类中的run方法
terminate():强制终止进程
"""
